// mapping type
type MappingType = {
    [key: string]: string | number | boolean;
};

// condition type
type ConditionType1 = String extends string ? string : void;
type ConditionType2<T> = T extends Number ? number : void;
type TypeChain = [
    never,
    string | number | boolean,
    String | Number | Boolean,
    object | Object,
    any | unknown,
]

// template literal type
type Prefix = 'head' | 'top';
type Suffix = ['tail', 'bottom'];
type TemplateLiteralType = `${Prefix}-${Suffix[0] | Suffix[1]}`; // head-tail | top-bottom
